Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Лабораторна робота №5

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Алгоритми та методи обчислень

Частина тексту файла

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 5 з дисципліни: “Алгоритми та методи обчислень” Індивідуальне завдання Реалізувати стандартний алгоритм матричного множення і запрограмувати метод Гауса (розв'язок системи лінійних алгебраїчних рівнянь). Код програми Matrix.h #ifndef MATRIX_H #define MATRIX_H #include <iostream> #include <iomanip> #include <ctime> class Matrix { private: int **data; int m; int n; public: Matrix(int m, int n) { this->m = m; this->n = n; this->data = new int *[this->m]; for (int i = 0; i < this->m; i++) { this->data[i] = new int[this->n]; for (int j = 0; j < this->n; j++) { this->data[i][j] = 0; } } } Matrix(Matrix& matrix) : Matrix(matrix.m, matrix.n) { for (int i = 0; i < this->m; i++) { for (int j = 0; j < this->n; j++) { this->data[i][j] = matrix.data[i][j]; } } } ~Matrix() { for (int i = 0; i < this->m; i++) { delete[] data[i]; } delete[] data; } void fill_matrix_by_random() { srand((unsigned int)time(nullptr)); for (int i = 0; i < this->m; i++) { for (int j = 0; j < this->n; j++) { data[i][j] = rand() % 10; } } } double *gauss() const { if (this->m < this->n - 1) std::cout << "Solution is impossible"; else { double *result = new double[this->m], **buffer = new double *[this->m], temp; for (int i = 0; i < this->m; i++) { buffer[i] = new double[this->n]; for (int j = 0; j < this->n; j++) { buffer[i][j] = (double)this->data[i][j]; } } int k; for (int i = 0; i < this->m; i++) { temp = buffer[i][i]; for (int j = m; j >= i; j--) { buffer[i][j] /= temp; } for (int j = i + 1; j < m; j++) { temp = buffer[j][i]; for (k = m; k >= i; k--) { buffer[j][k] -= temp * buffer[i][k]; } } } result[m - 1] = buffer[m - 1][m]; for (int i = m - 2; i >= 0; i--) { result[i] = buffer[i][m]; for (int j = i + 1; j < m; j++) { result[i] -= buffer[i][j] * result[j]; } } return result; } } Matrix operator*(const Matrix& matrix) const { if (this->n != matrix.m) throw "Multiplication is impossible for these matrixes"; else { Matrix result(this->m, matrix.n); for (int i = 0; i < result.m; i++) { for (int j = 0; j < result.n; j++) { int temp = 0; for (int k = 0; k < this->n; k++) temp += this->data[i][k] * matrix.data[k][j]; result.data[i][j] = temp; } } return result; } } friend std::istream& operator>>(std::istream& in, const Matrix& matrix) { for (int i = 0; i < matrix.m; i++) { for (int j = 0; j < matrix.n; j++) { in >> matrix.data[i][j]; } } return in; } friend std::ostream& operator<<(std::ostream& out, const Matrix& matrix) { for (int i = 0; i < matrix.m; i++) { for (int j = 0; j < matrix.n; j++) { out << std::setw(3) << matrix.data[i][j] << " "; } out << std::endl; } return out; } }; #endif // MATRIX_H Source.cpp #include <iostream> #include <conio.h> #include "Matrix.h" using namespace std; void main() { Matrix matrix1(4, 3), matrix2(3, 2); matrix1.fill_matrix_by_random(); matrix2.fill_matrix_by_random(); Matrix matrix3 = matrix1 * matrix2; cout << matrix1 << endl << " *" << endl << endl << matrix2 << endl << " =" << endl << endl << matrix3 << endl; cout << "Input number of variables:" << endl; int num; cin >> num; Matrix matrix4(num, num + 1); cout << endl << "Input coefficients:" << endl; cin >> matrix4; double *result = matrix4.gauss(); cout << endl << "Result:" << endl; for (int i = 0; i < num; i++) cout << result[i] << " "; cout << endl; _getch(); } Результат виконання програми /
Антиботан аватар за замовчуванням

30.03.2016 11:03

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини